package com.ruoyi.video;

import com.masiyi.ffmpeg.template.FFmpegTemplate;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.io.IOException;
import java.util.Map;


//用来进行视频推流播放
@RestController
@RequestMapping("/trans")
public class FFController {
    @Value("${ffmpeg.path}")
    private String ffmpegPath;
    @Value("${video_file.path}")
    private String m3u8Directory;
    @Value("${ruoyi.profile}")
    private String profile;

    @RequestMapping("/trans")
    public String show(){
        FFmpegTemplate ffmpegTemplate = new FFmpegTemplate(ffmpegPath);
        System.out.println(ffmpegTemplate.extractAudio("E:\\temp\\mvc.mp4"));
        try {
            ffmpegTemplate.execute("ffmpeg -re -i /usr/local/video/mvc.mp4 -vcodec libx264 -acodec aac -c copy -flvflags no_duration_filesize -f flv  -safe 0 rtmp://192.168.112.137:1935/mylive/77");
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
//         视频格式转换
//        ffmpegTemplate.convert("D:\\temp\\mvc.mp4","D:\\temp\\mvc.avi");
        return "success";
    }

    @PostMapping("/transGet")
    public AjaxResult getVideoM3u8Id(@RequestBody Map<String, String> params) {
        String id = params.get("m3u8Id");
        String url = params.get("fileUrl");

        String newPath = url.replaceFirst("^/profile", "");
        // 检查 m3u8 文件是否存在
        File m3u8File = new File(m3u8Directory, id + ".m3u8");
        if (m3u8File.exists()) {
            System.out.println("文件已存在，跳过推流操作：" + m3u8File.getAbsolutePath());
            return AjaxResult.success("文件已存在，跳过推流操作");
        }

        // 执行推流操作
        System.out.println("推流开始：" + id);
        FFmpegTemplate ffmpegTemplate = new FFmpegTemplate(ffmpegPath);
        try {
            String command = String.format(
                    "ffmpeg -re -i %s%s -vcodec libx264 -acodec aac -c copy -flvflags no_duration_filesize -f flv -safe 0 rtmp://192.168.65.130:1935/mylive/%s",
                    profile, newPath, id
            );
            ffmpegTemplate.execute(command);
        } catch (IOException | InterruptedException e) {
            System.err.println("推流失败：" + e.getMessage());
            return AjaxResult.error("推流失败：" + e.getMessage());
        }

        // 返回成功消息
        return AjaxResult.success("推流完成");
    }
}

